/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxline.atlasmobile.manager;

import br.com.foxline.atlasmobile.enums.TipoDocumento;
import br.com.foxline.model.Endereco;
import br.com.foxline.model.Imovel;
import br.com.foxline.model.Proprietario;
import br.com.foxline.service.EnderecoService;
import br.com.foxline.service.ImovelService;
import br.com.foxline.service.ProprietarioService;
import br.com.foxline.util.Caracter;
import br.com.foxline.util.Msg;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author laverson
 */
@ManagedBean
@ViewScoped
public class ManagerProprietario implements Serializable {

    @EJB
    ProprietarioService proprietarioService;
    @EJB
    EnderecoService enderecoService;
    @EJB
    ImovelService imovelService;
    private Proprietario proprietario;
    private Proprietario editarProprietario;
    private Proprietario pesquisarProprietario;
    private Proprietario visualizarProprietario;
    private Proprietario deleteProprietario;
    private List<Proprietario> proprietarios;
    private List<Imovel> imoveis;
    
    private String vProprietario;
    private String eProprietario;
    
    private boolean renderInputsCpf;

    @PostConstruct
    public void init() {
        proprietario = new Proprietario();
        proprietario.setTipoDocumento(TipoDocumento.CPF);
        proprietario.setEndereco(new Endereco());
        pesquisarProprietario = new Proprietario();
        pesquisarProprietario.setTipoDocumento(TipoDocumento.CPF);

        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        vProprietario = params.get("vProprietario");
        eProprietario = params.get("eProprietario");
        paramPost();
    }

    public void paramPost() {
        try {
            if(vProprietario != null){
                visualizarProprietario = proprietarioService.find(Long.parseLong(vProprietario));
                if (visualizarProprietario.getEndereco() == null) {
                    visualizarProprietario.setEndereco(new Endereco());
                }
                imoveis = imovelService.findImovelProprietario(visualizarProprietario);
                
                if (visualizarProprietario.getTipoDocumento() == null || visualizarProprietario.getTipoDocumento().equals(TipoDocumento.CPF)) {
                    renderInputsCpf = true;
                    
                } else{
                    renderInputsCpf = false;
                }
            }
            else if(eProprietario != null){
                editarProprietario = proprietarioService.find(Long.parseLong(eProprietario));
                if (editarProprietario.getEndereco() == null) {
                    editarProprietario.setEndereco(new Endereco());
                }
                
                imoveis = imovelService.findImovelProprietario(editarProprietario);
                
                if (editarProprietario.getTipoDocumento() == null || editarProprietario.getTipoDocumento().equals(TipoDocumento.CPF)) {
                    renderInputsCpf = true;
                } else{
                    renderInputsCpf = false;
                }
            }
        } catch (Exception erro) {
            erro.printStackTrace();
        }
    }

    public List<SelectItem> tipoDocumentoList() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (TipoDocumento tipo : TipoDocumento.values()) {
            items.add(new SelectItem(tipo.getTipo(), tipo.getNome()));
        }
        return items;
    }

    public void save() {
        try {
            proprietarioService.save(proprietario);
            Msg.messagemInfo(Msg.SuccessFull);
        } catch (Exception e) {
            Msg.messagemError(Msg.Failure);
        }
        init();
    }
    
    public void search() {
        pesquisarProprietario.setCpf(Caracter.removecaracter(pesquisarProprietario.getCpf()));
        pesquisarProprietario.setCnpj(Caracter.removecaracter(pesquisarProprietario.getCnpj()));
        proprietarios = proprietarioService.findProprietario(pesquisarProprietario);
    }

    public void update() {
        try {
            proprietarioService.update(editarProprietario);
            Msg.messagemInfo(Msg.SuccessFull);
        } catch (Exception e) {
            Msg.messagemError(Msg.Failure);
        }
    }

    public void delete() {
        proprietarios.remove(deleteProprietario);
        proprietarioService.delete(deleteProprietario);
    }
    
    public void clear(){
        pesquisarProprietario = new Proprietario();
        pesquisarProprietario.setTipoDocumento(TipoDocumento.CPF);
    }
    
    public void existeEndereco(){
        Endereco endereco;
        if (eProprietario != null) {
            endereco = this.enderecoService.existCep(editarProprietario.getEndereco());
            if (endereco != null) {
                editarProprietario.setEndereco(endereco);
            }
        } else if (vProprietario != null){
            endereco = this.enderecoService.existCep(visualizarProprietario.getEndereco());
            if (endereco != null) {
                visualizarProprietario.setEndereco(endereco);
            }
        } else {
            endereco = enderecoService.existCep(proprietario.getEndereco());
            if (endereco != null) {
                proprietario.setEndereco(endereco);
            }
        }
    }

    public Proprietario getProprietario() {
        return proprietario;
    }

    public void setProprietario(Proprietario proprietario) {
        this.proprietario = proprietario;
    }

    public Proprietario getEditarProprietario() {
        return editarProprietario;
    }

    public void setEditarProprietario(Proprietario editarProprietario) {
        this.editarProprietario = editarProprietario;
    }

    public Proprietario getPesquisarProprietario() {
        return pesquisarProprietario;
    }

    public void setPesquisarProprietario(Proprietario pesquisarProprietario) {
        this.pesquisarProprietario = pesquisarProprietario;
    }

    public Proprietario getDeleteProprietario() {
        return deleteProprietario;
    }

    public void setDeleteProprietario(Proprietario entity) {
        this.deleteProprietario = entity;
    }

    public List<Proprietario> getProprietarios() {
        return proprietarios;
    }

    public void setProprietarios(List<Proprietario> proprietarios) {
        this.proprietarios = proprietarios;
    }

    public Proprietario getVisualizarProprietario() {
        return visualizarProprietario;
    }

    public void setVisualizarProprietario(Proprietario visualizarProprietario) {
        this.visualizarProprietario = visualizarProprietario;
    }

    public List<Imovel> getImoveis() {
        return imoveis;
    }

    public void setImoveis(List<Imovel> imoveis) {
        this.imoveis = imoveis;
    }

    public boolean isRenderInputsCpf() {
        return editarProprietario.getTipoDocumento().equals(TipoDocumento.CPF);
    }

    public void setRenderInputsCpf(boolean disableInputsCpf) {
        this.renderInputsCpf = disableInputsCpf;
    }
}
